背景 尽管Windows平台有诸多优势,Linux平台的发展还是势不可挡,特别实在传统行业,然而Linux生态构建,总是差点意思,特别是有些常用的组件,本文基于已有的Linux平台RTSP、RTMP播放模块 ,构建Unity下的RTSP和RTMP直播播放。 技术实现 实际上,Unity层面这块没什么好介绍的,和Windows、Android、iOS平台一样,调用原生的播放模块,回调解码后的数据,在Unity绘制,主要的技术难点,还在原生的处理,也就是拉流、 先上个直观感受图,本视频以Windows平台采集秒表计时器窗体,然后编码打包传输到RTMP服务,Unity3D的Linux平台RTMP播放器拉流播放,整体延迟毫秒级。 Unity下,简单来说就是拉流解码回调,上层绘制,其实也没有那么复杂,需要注意的是DllImport的写法、之前C++结构体或枚举的转换、Unity3D对Linux的版本兼容等一些细节,对熟悉C#的开发者来说
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品 ,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。 废话不多说,以Windows平台多路播放为例: 1.Native播放器吐RGB/YUV420/NV12等其中的一种未压缩的图像格式 比如Windows平台,我们回调YUV上来(NT_SP_E_VIDEO_FRAME_FROMAT_I420 ),本文以调用大牛直播SDK(Github)的Windows平台RTSP、RTMP播放器SDK为例,具体代码如下: public void Play(int sel) { 具体播放效果如下 windows4player.png 总结 Unity3d下,做多路播放的话,首先确保调用的拉流解码数据的模块具备回调yuv/rgb数据能力,回上来后,再上层直接刷新显示即可,是不是没有你想的那么复杂
从摄像机获取的RTSP视频流直接在浏览器中播放,这里采用vlc插件进行播放,设置步骤如下 1、下载32位的vlc播放器,安装时选择安装插件,安装路径不要有空格,注意64位播放器安装上也不能正常播放 (我测试不能正常播放) 2、注册VLC插件(否则视频无法正常显示):使用cmd 运行:regsvr32 D:\VideoLAN32\VLC\axvlc.dll 其中D:\VideoLAN32\VLC为VLC events=’false’width=”720″height=”410″> object> div> body> 其中,value=’rtsp://184.72.239.149/vod/mp4://BigBuckBunny loop: (true或false),是否循环 fullscreen:是否全屏 controls:显示默认的控件 4、目前测试IE浏览器和360浏览器可以正常支持vlc插件播放 5、若需要播放多个视频 ,将object标签拷贝几次,将id改一下,将不同的RTSP视频流地址修改即可。
技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。 实际上,我们在前几年发布Unity下直播播放模块的时候,就已经支持了Android多实例播放RTMP|RTSP,随着大家对这块的技术诉求和性能要求越来越高,我们需要持续考虑如何低资源占用的播放多实例流。 实现思路目前,我们是通过大牛直播SDK原生的RTMP|RTSP播放器,设置回调解码后的YUV或RGB数据,然后投递到Unity层,在Unity层做渲染。 对于每一路RTMP或RTSP流,可以分别创建个播放实例,并启动播放。可以创建一个管理类,用于统一管理多个播放器实例,方便对多路流的播放状态进行监控和控制。 以上是Unity下多路播放RTMP|RTSP的技术探讨,感兴趣的开发者,可以单独跟我沟通讨论。
随着VR类、游戏类场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放 本文以Android平台为例,我们的实现:基于大牛直播SDK现有非常成熟的native RTMP和RTSP播放模块,回调解码后的原始数据,传递给Unity3d,实现相应的绘制即可,对应demo,可以参考 Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. Unity3D创建相应的RGB/YUV420等Shader; 3.Unity3D从各个平台获取图像数据来填充纹理即可。 "); } is_running = true; } 开始播放后,native模块,回调yuv/rgb数据,unity3d模块,做相应的绘制处理即可。
技术背景好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据 目前,Unity3D下,我们覆盖了以下常用的模块:Windows平台RTMP直播推送模块(采集Unity窗体、摄像头或屏幕);Windows平台轻量级RTSP服务模块(采集Unity窗体、摄像头或屏幕) ;Windows平台RTMP|RTSP直播播放模块;Linux平台RTMP直播推送模块(采集Unity窗体、Unity声音),也可扩展轻量级RTSP服务模块;Linux平台RTMP|RTSP直播播放模块 |RTSP直播播放模块;iOS平台RTMP|RTSP直播播放模块。 图片技术实现本文以Android平台RTMP、RTSP播放模块为例,介绍下Unity相关接口设置和逻辑处理:开始播放 public void Play() { if (is_running
GitHub – 131/h264-live-player: A live h264 player for the browser (ideal for raspberrypi / raspicam ) 网页播放 rtsp视频流 原文:网页播放rtsp视频流_江山夜雨的博客-CSDN博客_web播放rtsp RTSP协议 (1)是流媒体协议。 (2)RTSP协议是共有协议,并有专门机构做维护。 (3)RTSP协议一般传输的是 ts、mp4 格式的流。 (4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。 如果客户使用ie或者firefox的话,可以使用vlc player,vlc player 同样需要安装插件,需要电脑上安装vlc player的本地客户端(安装时勾选插件选项),然后通过 标签来引入播放 //www.apple.com/quicktime/"></embed> </object> 3、H5- streamedian 参考地址:Streamedian ,支持chrome无插件播放
本代码是使用GStreamer播放RTSP视频流,没有使用playbin,而是自己构建pipeline,经测试可以正常播放视频。 data.sink), "sync", FALSE, NULL); /* Set the URI to play */ g_object_set (data.source, "location", "rtsp pad */ gst_object_unref (sink_pad); } 编译命令: gcc rtspplay.c `pkg-config --cflags --libs gstreamer-1.0` RTSP 地址换成自己的即可,上述代码只是简单展示如何使用pipeline播放RTSP视频。
最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究。而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。 方案一: html5 + websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 var errHandler flash允许 参考链接 方案三:ffmpeg + video,rtsp转hls播放 HLS (HTTP Live Streaming) 直播 是有苹果提出的一个基于http的协议。 = videojs(‘my_video_1’, {“autoplay”:true}); player.play(); 复制代码 参考链接 方案四:VLC插件播放 播放步骤 下载安装vlc 浏览器播放 复制代码 优缺点 优点: 可以直接播放RTSP,无需任何中介服务器的帮助 缺点: 需要手动安装插件; 基于NPAPI,不被最新的 Chrome 和 Firefox 支持 如果你项目的其他功能都能兼容客户电脑上的
RTSP协议探究RTSP播放器可广泛应用于对延迟要求比较高的场景下,比如协同操控相关的智能机器人或无人机、实时视频监控、远程视频会议、网络电视等。通过控制信令实现对流媒体数据的远程控制和传输管理。 三、协议功能播放控制:客户端可以通过RTSP命令控制媒体流的播放,如播放、暂停、停止、快进和快退等。 如何实现RTSP播放器 本文以大牛直播SDK的Windows平台RTSP直播播放器为例,大概介绍下,如何集成RTSP直播播放能力。 NT_SP_StartPlay开始播放RTMP或RTSP流数据。 停止播放NT_SP_StopPlay停止播放RTMP或RTSP流数据。关闭播放实例NT_SP_Close调用Close接口后,player handler置空。
Unity环境下RTMP|RTSP播放器 Unity环境下RTMP或RTSP直播播放我们前几年就有发布,并已应用在好多传统行业领域,比如教育或工业仿真或一些低延迟的控制场景。 Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. Unity3D创建相应的RGB/YUV420等Shader; 3.Unity3D从各个平台获取图像数据来填充纹理即可; 需要注意的有几点: 1. 相关博客: Windows平台Unity3d下如何同时播放多路RTSP或RTMP流 https://cloud.tencent.com/developer/article/1800633 如何在Unity3d 平台下低延迟播放RTMP或RTSP流 https://cloud.tencent.com/developer/article/1592731
今天就Unity下的RTSP|RTMP的低延迟播放,从以下几个维度,抛砖引玉,做个探讨: 选择合适的播放插件 Unity下的RTSP|RTMP低延迟播放,业内想到最多的是大牛直播SDK的SmartPlayer ,支持 RTMP 和 RTSP 直播流播放,在资源占用、延迟等方面表现较好。 [支持播放协议]RTSP|RTMP; [多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调; [视频格式]支持H.265、H.264,此外,还支持RTSP MJPEG播放; 技术实现以大牛直播SDK的Windows平台Unity下的RTSP|RTMP直播播放模块为例,开始播放实现如下,开始播放之前,可以选择用软解码还是硬解码:/* SmartPlayerWinMono.cs 4路海康2560*1440分辨率的RTSP流,资源占用如下:总结Windows平台如果对延迟和资源占有等,要求非常高,可以选择合适的低延迟RTSP或RTMP播放插件、优化播放参数设置、优化网络环境、优化代码和渲染流程
技术背景2015年,在大家精力放在点播播放的时候,大牛直播SDK已开始布局RTMP、RTSP的低延迟直播技术。 技术特点超低延迟与稳定性超低延迟:大牛直播SDK的RTSP播放器在延迟控制方面表现出色,能够将播放延迟稳定地控制在较低水平,这对于直播场景尤为重要,能够显著提升用户体验。 功能丰富多实例播放:支持同时播放多路RTSP流,适用于需要同时监控多个视频源的场景。 功能覆盖 [支持播放协议]高稳定、超低延迟、业内首屈一指的RTSP直播播放器SDK; [多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调; [视频格式]支持H.265、H.264 RTSP播放器在超低延迟、稳定性、跨平台支持、功能丰富性、易用性与集成性等方面均表现出色,是一款值得推荐的流媒体播放解决方案。
实现了浏览器 MSE (Media Source Extensions) 播放相机 RTSP (Real Time Streaming Protocol) 流。 更多 技术: WebSocket[2] MediaSource[3]: 构建媒体流,供 video/audio 元素播放 WebRTC[4]: 可直接捕获客户端视频流,并点对点传输、不依赖服务器中转 WebCodecs [12]: RTSP > fMP4 Streamedian/html5_rtsp_player[13]: RTSP > fMP4, Proxy 收费 JS 解码 131/h264-live-player [21] kyriesent/node-rtsp-stream[15] wanghaoxi3000/gin-rtsp[16] YE-Fan/JAVA-RTSP-JSMpeg[17] Aleckgt/rtsp-ws-proxy /gin-rtsp [17] YE-Fan/JAVA-RTSP-JSMpeg: https://github.com/YE-Fan/JAVA-RTSP-JSMpeg [18] Aleckgt/rtsp-ws-proxy
技术背景好多开发者在播放RTSP或RTMP流的时候,特别是多路播放的时候,希望能试试调节单个视频画面的声音(静音或放大缩小音量),常见的实时调节播放音量可以通过以下方式实现:利用操作系统的音频控制在某些情况下 ,我们可能无法直接通过播放器控制音量,这时候,可以使用操作系统的全局音频控制来调节RTSP或RTMP播放器的音量。 利用播放模块自带的音量调节控制一个功能完善的RTSP或RTMP播放器,一般自带实时静音或实时音量调节,如果支持这种模式,就非常方便,可以只条件播放器的volume,不影响系统的音量。 流媒体协议:除了本地文件播放,VLC 还支持多种流媒体协议,如 RTMP、HTTP、RTSP 等。这使得用户可以直接播放来自网络的流媒体内容,如在线视频、网络电台等。 播放控制功能: 多实例播放:支持同时播放多路 RTMP 或 RTSP 流,方便用户同时观看多个直播源,例如在监控场景中可同时查看多个监控摄像头的画面。
Linux、Unity3D 各端保持接口与能力统一,同时根据平台特性进行优化(如移动端硬编、Unity3D 共享纹理渲染)。 分发与播放层 对应模块:RTSP 播放 SDK、RTMP 播放 SDK、HTTP-FLV 播放 SDK 职责:在终端侧以最小的缓冲和最高的解码效率呈现视频流,同时保持音画同步和流畅度。 组合方案: 推流:RTSP Push(来自一对一互动 SDK)或 RTMP Push SDK 中转:轻量级 RTSP 服务 SDK 播放:RTSP Playback SDK(多平台统一) 策略要点: 组合方案: 推流:RTMP Push SDK(可配合 SRT 网关) 中转:多路 RTSP 转 RTMP 推送 SDK 播放:HTTP-FLV Playback SDK(Android/Unity3D ) Playback:RTSP Playback SDK(Windows / Android / iOS / Unity3D) Enhancement:本地 Recording SDK(用于录像、回放
Unity3d(Windows/Android/iOS)二次封装,也可能是Unity3D平台下首款真正功能强大的高稳定、超低延迟的RTMP/RTSP直播播放器。 Unity3D RTSP/RTMP播放SDK相关(支持Windows/Android/iOS) windows/android/iOS播放器SDK(V2)Unity3D调用说明(更新于2020/03/25 OCX控件接口调用; Unity3D RTMP/RTSP直播播放器SDK 业内首家Windows支持Unity3D的超低延迟RTMP/RTSP直播播放器SDK,支持快照、录像、实时静音、view RTMP超低延迟直播播放器SDK(支持RTMP H.265扩展播放); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D RTMP超低延迟直播播放器SDK(支持RTMP H.265扩展播放); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器. 集成Navtive播放器可行性分析: 安卓: Unity3d可以调用安卓java接口,这方面的例子很多,搜索能找到一大堆。 Windows: Unity3d调用C#就不用说了,天生支持,C#调用c dll, 可以使用P/INVOKE技术,或者把C接口封装成com组件也可以。 综上Unity3d和3个平台交互是没问题的. 这三个平台已经有成熟稳定低延时的rtmp/rtsp播放器SDK了,只要这些现有的播放SDK能吐图像数据, 然后让Unity3d绘制即可。 实现步骤: 1.Native播放器SDK支持吐RGB/YUV420/NV12等其中的一种未压缩的图像格式。
本文将介绍 RTSP H264/HEVC 裸流如何于网页前端播放。涉及 WebSocket 代理发送流数据, Wasm 前端解码等。 代码: https://github.com/ikuokuo/rtsp-wasm-player 相关模块: # RTSP WebSocket Proxy RTSP/Webcam/File > FFmpeg WS Wasm Player: 前端播放实现(ES6)。WebSocket, Wasm, WebGL 等封装,提供了 WsClient 接口。 WS Local Player: 本地播放实现(C++)。与前端流程一样,向流代理服务器请求数据,解码后 OpenGL 显示。 前端解码与播放 主流程: # WS Wasm Player WebSocket > Packets > Wasm FFmpeg decode to YUV > WebGL display
在网上找的rtsp流的视频链接 rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov 设置Activity横屏 if (this.getResources setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } 开启线程进行视频的播放 Override protected void onDestroy() { if(player.isPlaying()){ player.stop();//停止音频的播放